char *p=new char[] 有没有问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 13:51:14
[]内没指定长度,是否根据cin>>p决定分配内存的大小?

#include <iostream>
using namespace std;
int len(char *);
void lj(char *,char *);
char *q;
void main()
{
char *c1,*c2;
cout<<"分别输入两个字符串"<<endl;
c1=new char[];
c2=new char[];
cin>>c1>>c2;
lj(c1,c2);
cout<<"连接后的字符串为"<<endl;
cout<<q<<endl;
}
int len(char *p)
{
int i=0;
while(1)
{
if(p[i]=='\0') break;
i++;
}
return i+1;
}
void lj(char *s1,char *s2)
{
int l1,l2;
l1=len(s1);
l2=len(s2);
q=new char[l1+l2-1];
for(int i=0;i<l1+l2-1;i++)
{
if(i<l1-1) q[i]=s1[i];
else q[i]=s2[i-l1+1];
}
}

不会的,最多new操作符做了特殊处理,可能在你未指定大小的时候,给了默认的大小。

但是肯定会有问题的

当然不可能。 分配就得指定长度

既然用C++, 尽量放弃char[]吧 , 改用string类,少很多麻烦事

这样不行吧。你建立的c1都没有空间来存放输入的c1数据啊。(我是这样理解)。
但是VC2005下边
#include <iostream>
using namespace std;

int main(void)
{
char *p = new char[];
cin>>p;
cout<<p;
return 0;
}
这样的程序是能够正常运行的,并且下边的p的地址确实是初始化那个p的地址。